home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 12 / CU Amiga Magazine's Super CD-ROM 12 (1997)(EMAP Images)(GB)[!][issue 1997-07].iso / CUCD / Games / DestructivePoker / sources / sources.lha / ReMapBitMap.cpp < prev    next >
C/C++ Source or Header  |  1997-02-13  |  2KB  |  83 lines

  1. /*
  2.         ReMapBitMap.cpp
  3.  
  4.         V1.00 - 110297  Kimmo Teräväinen
  5.         -----   ------  ----------------
  6.         V0.01   110297  Copied from How2UseGfxV39 by Jürgen Schober
  7.         V0.10   110297  and edited to suit my purpose.
  8.         V0.11   110297  After some bugs got this piece of code to work...
  9.  
  10. */
  11.  
  12. #include <inline++/exec.h>
  13. #include <inline++/graphics.h>
  14. #include <graphics/gfx.h>
  15. #include <graphics/gfxbase.h>
  16. #include <graphics/rastport.h>
  17.  
  18.  
  19. ReMapBitMap(BitMap &bm,RastPort *rp,const UBYTE *pens)
  20. {
  21.   int i,error=0,sdepth=rp->BitMap->Depth;
  22.   ULONG pixels;
  23.   UBYTE *ChunkyData;
  24.   struct RastPort tmpRastPort,tmpRastPort2;
  25.   register UBYTE pen;
  26.  
  27.   CopyMem(rp,&tmpRastPort,sizeof(struct RastPort));
  28.   tmpRastPort.Layer = NULL;
  29.   tmpRastPort.BitMap = &bm;
  30.  
  31.   CopyMem(rp,&tmpRastPort2,sizeof(struct RastPort));
  32.   tmpRastPort2.Layer = NULL;
  33.   if(tmpRastPort2.BitMap = AllocBitMap(bm.BytesPerRow*8,1,8,0,NULL))
  34.   {
  35.     for( i = 0; i < 8; i++ )
  36.       BltClear(tmpRastPort2.BitMap->Planes[i],bm.BytesPerRow,0);
  37.     WaitBlit();
  38.  
  39.  
  40.     if(ChunkyData = (UBYTE*)AllocVec(bm.Rows*bm.BytesPerRow*8, 0))
  41.     {
  42.       ReadPixelArray8(&tmpRastPort,0,0,bm.BytesPerRow*8-1,bm.Rows-1,ChunkyData,&tmpRastPort2);
  43.  
  44.  
  45.       pixels=bm.Rows*bm.BytesPerRow*8;
  46.       while (pixels--)
  47.       {
  48.           pen = ChunkyData[pixels] & 7;
  49.           ChunkyData[pixels] = pens[pen];
  50.       }
  51.  
  52.  
  53.       for( i=0; i < 8; i++ ) {
  54.         if(i<sdepth) {
  55.           if(!bm.Planes[i]) {
  56.             if(!(bm.Planes[i] = (PLANEPTR) AllocRaster(bm.BytesPerRow*8, bm.Rows))){
  57.               error = 10; break;
  58.             }
  59.           }
  60.         }
  61.         else if(bm.Planes[i]) {
  62.           FreeRaster(bm.Planes[i],bm.BytesPerRow*8, bm.Rows);
  63.           bm.Planes[i]=NULL;
  64.         }
  65.       }
  66.  
  67.       if(!error)
  68.       {
  69.         bm.Depth=sdepth;
  70.         if(GfxBase->LibNode.lib_Version >= 40)
  71.           WriteChunkyPixels(&tmpRastPort,0,0,bm.BytesPerRow*8-1,bm.Rows-1,ChunkyData,bm.BytesPerRow * 8);
  72.         else
  73.           WritePixelArray8(&tmpRastPort,0,0,bm.BytesPerRow*8-1,bm.Rows-1,ChunkyData,&tmpRastPort2);
  74.       }
  75.  
  76.       FreeVec(ChunkyData);
  77.     }
  78.     WaitBlit();
  79.     FreeBitMap(tmpRastPort2.BitMap);
  80.   }
  81.  
  82. }
  83.